﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CLab.Base;
using CLab.Utils.Extensions;
using CLab.Common.Objects;
using System.Data;
using CLab.Common.Constantes;

namespace CLab.PagAdminLab
{
    public partial class CatPaqueteRegistro : PageBase
    {
        public int? IdPaquete
        {
            get { return ViewState["IdPaquete"] as int?; }
            set { ViewState["IdPaquete"] = value; }
        }
        #region Eventos
        protected void Page_Init(object sender, EventArgs e)
        {
            IdItem = 5;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    Master.TituloPagina = "Paquetes de Estudios";
                    if (ViewParametros.Count > 0)
                    {
                        IdPaquete = Common.Util.Convert.ToNInt(ViewParametros.Find(delegate(Parametro p) { return p.Nombre == "IdPaquete"; }).Valor);
                        ObtenInfo(Common.Util.Convert.ToInt(IdPaquete));
                    }

                    CargaListas();
                    SetFocus(txtPaquete.ControlTextBox.ClientID);
                }
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            ArrayList values = new ArrayList();
            foreach(int index in lstEstudios.ControlListBox.GetSelectedIndices())
            {
                if (lstEstPaq.ControlListBox.Items.FindByValue(lstEstudios.ControlListBox.Items[index].Value) == null)
                {
                    ListItem item = new ListItem(lstEstudios.ControlListBox.Items[index].Text, lstEstudios.ControlListBox.Items[index].Value);
                    lstEstPaq.ControlListBox.Items.Add(item);
                    values.Add(lstEstudios.ControlListBox.Items[index].Value);
                }
            }

            //// Quito de estudios
            foreach (string value in values)
            {
                ListItem item = lstEstudios.ControlListBox.Items.FindByValue(value);
                if (item != null)
                    lstEstudios.ControlListBox.Items.Remove(item);
            }
        }

        protected void btnQuitar_Click(object sender, EventArgs e)
        {
            ArrayList values = new ArrayList();
            foreach (int index in lstEstPaq.ControlListBox.GetSelectedIndices())
            {
                if (lstEstudios.ControlListBox.Items.FindByValue(lstEstPaq.ControlListBox.Items[index].Value) == null)
                {
                    ListItem item = new ListItem(lstEstPaq.ControlListBox.Items[index].Text, lstEstPaq.ControlListBox.Items[index].Value);
                    lstEstudios.ControlListBox.Items.Add(item);
                    values.Add(lstEstPaq.ControlListBox.Items[index].Value);
                }
            }

            //// Quito de estudios
            foreach (string value in values)
            {
                ListItem item = lstEstPaq.ControlListBox.Items.FindByValue(value);
                if (item != null)
                    lstEstPaq.ControlListBox.Items.Remove(item);
            }
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                PaqueteServiceReference.PaqueteServiceClient srv = new PaqueteServiceReference.PaqueteServiceClient();
                PaqueteServiceReference.Paquete paq = new PaqueteServiceReference.Paquete();
                paq.IdPaquete = IdPaquete;
                paq.Descripcion = txtPaquete.Text.Trim();
                paq.Precio = Common.Util.Convert.ToDecimal(txtPrecio.Text);
                paq.IdLaboratorio = SessionLaboratorio.IdLaboratorio;
                paq.ListaEstudios = lstEstPaq.ConvertToXml();
                IdPaquete = srv.RegistraPaquete(paq);
                CargaListas();
                Master.alertExito();
            }
            catch (Exception ex)
            {
                Master.alert(ex.Message);
            }
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            Nuevo();
        }
        #endregion

        #region Metodos
        private void Nuevo()
        {
            txtPaquete.Text = "";
            txtPrecio.Text = "";
            lstEstPaq.ControlListBox.Items.Clear();
            lstEstudios.ControlListBox.Items.Clear();
            IdPaquete = null;
            CargaListas();
            txtPaquete.Text = string.Empty;
            SetFocus(txtPaquete.ControlTextBox.ClientID);
        }

        private void CargaListas()
        {
            if (IdPaquete != null)
            {
                lstEstPaq.ObtenEstudiosPaq(SessionLaboratorio.IdLaboratorio, CLab.Common.Util.Convert.ToInt(IdPaquete));
            }

            lstEstudios.ObtenEstudios(SessionLaboratorio.IdLaboratorio, lstEstPaq.ConvertToString());
        }

        private void ObtenInfo(int idPaquete)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta("@pnIdLaboratorio", CLab.Common.Util.Convert.ToNInt(SessionLaboratorio.IdLaboratorio), ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@pnIdPaquete", CLab.Common.Util.Convert.ToNInt(idPaquete), ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] prms = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(prms);
            //Ejecuta conulta
            DataSet ds = servicio.EjecutaConsultaConParametros("spObtenPaquete", prms);
            if (ds.Tables[0].Rows.Count > 0)
            {
                txtPaquete.Text = ds.Tables[0].Rows[0][Columnas.Descripcion].ToString();
                txtPrecio.Text = ds.Tables[0].Rows[0][Columnas.Precio].ToString();
            }
        }
        #endregion
    }
}